#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
const int N=165;
const int M=13;
int n,m;
int a[N][N];
int f[N][1<<M];
bool fl;
int ans[N][N];
inline int gid(int x,int y){return (x-1)*m+y;}
int main(){
    freopen("disanti.in","r",stdin);
    freopen("disanti.out","w",stdout);
    cin>>n>>m;
    if(m>n){
        fl=1;
        swap(n,m);
    }
    if(fl){
        for(int i=1;i<=m;++i){
            for(int j=1;j<=n;++j){
                char ls;
                cin>>ls;
                a[j][i]=ls-'0';
            }
        }
    }
    else{
        for(int i=1;i<=n;++i){
            for(int j=1;j<=m;++j){
                char ls;
                cin>>ls;
                a[i][j]=ls-'0';
            }
        }
    }
    //cout<<n<<' '<<m<<'\n';
    for(int fi=1;fi<=n;++fi){
        for(int fj=1;fj<=m;++fj){
            a[fi][fj]^=1;
            memset(f,0,sizeof(f));
            f[0][0]=1;
            for(int i=1;i<=n;++i){
                int la=gid(i,1)-1;
                for(int j=2;j<=m;++j){
                    if(a[i][j]!=a[i][1])break;
                    int no=gid(i,j);
                    for(int k=0;k<(1<<m);++k){
                        f[no][k&((1<<m)-(1<<j))]=(f[no][k&((1<<m)-(1<<j))]+f[la][k])%mod;
                    }
                }
                for(int j=1;j<=m;++j){
                    int no=gid(i,j);
                    for(int k=0;k<(1<<m);++k){
                        if((k&(1<<j-1))){
                            f[no][k]=(f[no-1][k]+f[no-1][k^(1<<j-1)])%mod;
                            if(i!=1&&a[i][j]==a[i-1][j])f[no][k]=(f[no][k]+f[no-1][k])%mod;
                        }
                    }
                    for(int k=0;k<(1<<m);++k){
                        for(int t=j+2;t<=m;++t){
                            if(a[i][t]!=a[i][j+1])break;
                            int to=gid(i,t);
                            f[to][k&((1<<m)-(1<<t)+(1<<j)-1)]=(f[to][k&((1<<m)-(1<<t)+(1<<j)-1)]+f[no][k])%mod;
                        }
                    }
                }
            }
            a[fi][fj]^=1;
            for(int i=0;i<(1<<m);++i){
                ans[fi][fj]=(ans[fi][fj]+f[n*m][i])%mod;
            }
        }
    }
    if(fl){
        for(int i=1;i<=m;++i){
            for(int j=1;j<=n;++j){
                cout<<ans[j][i]<<' ';
            }
            cout<<'\n';
        }
    }
    else{
        for(int i=1;i<=n;++i){
            for(int j=1;j<=m;++j){
                cout<<ans[i][j]<<' ';
            }
            cout<<'\n';
        }
    }
    return 0;
}
